package com.shangcheng.server.service.impl;

import cn.hutool.core.convert.Convert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.shangcheng.model.domain.PmsProductAttribute;
import com.shangcheng.model.vo.PageResult;
import com.shangcheng.model.vo.PmsProductAttributeAttrInfoVo;
import com.shangcheng.server.exception.BusinessException;
import com.shangcheng.server.mapper.PmsProductAttributeMapper;
import com.shangcheng.server.service.PmsProductAttributeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;

import java.util.ArrayList;
import java.util.List;

@Service
public class PmsProductAttributeServiceImpl extends ServiceImpl<PmsProductAttributeMapper, PmsProductAttribute> implements PmsProductAttributeService {
    @Autowired
    private PmsProductAttributeMapper pmsProductAttributeMapper;

    @Override
    public List<PmsProductAttributeAttrInfoVo> attrInfo(Integer productCategoryId) {
        List<Long> ids = pmsProductAttributeMapper.getAttributeCategoryId(productCategoryId);
        if (ObjectUtils.isEmpty(ids)){
            return null;
        }
        List<PmsProductAttribute> pmsProductAttributes = listByIds(ids);
        List<PmsProductAttributeAttrInfoVo> list = new ArrayList<>();
        for (PmsProductAttribute pmsProductAttribute : pmsProductAttributes) {
            PmsProductAttributeAttrInfoVo pmsProductAttributeAttrInfoVo = new PmsProductAttributeAttrInfoVo();
            pmsProductAttributeAttrInfoVo.setAttributeCategoryId(Math.toIntExact(pmsProductAttribute.getProductAttributeCategoryId()));
            pmsProductAttributeAttrInfoVo.setAttributeId(Math.toIntExact(pmsProductAttribute.getId()));
            list.add(pmsProductAttributeAttrInfoVo);
        }
        return list;
    }

    @Override
    public void deleteByids(Integer[] ids) {
        List<Long> objects = (List<Long>) Convert.toList(ids);
        removeByIds(objects);
    }

    @Override
    public boolean savePmsProductAttribute(PmsProductAttribute pmsProductAttribute) {
        String name = pmsProductAttribute.getName();
        LambdaQueryWrapper<PmsProductAttribute> wrapper = new LambdaQueryWrapper<PmsProductAttribute>();
        wrapper.eq(PmsProductAttribute::getName, name);
        wrapper.eq(PmsProductAttribute::getProductAttributeCategoryId,pmsProductAttribute.getProductAttributeCategoryId());
        wrapper.eq(PmsProductAttribute::getType,pmsProductAttribute.getType());
        PmsProductAttribute one = getOne(wrapper);
        if (!ObjectUtils.isEmpty(one)){
            throw new BusinessException("该属性名已存在");
        }
        return save(pmsProductAttribute);
    }

    @Override
    public PageResult productAttribute(Integer cid, Integer pageNum, Integer pageSize, Integer type) {
        List<Long> ids = pmsProductAttributeMapper.getAttributeCategoryId(cid);
        if (ObjectUtils.isEmpty(ids)){
            return null;
        }
        LambdaQueryWrapper<PmsProductAttribute> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(PmsProductAttribute::getType,type).in(PmsProductAttribute::getId,ids);
        Page page = new Page(pageNum,pageSize);
        page(page,wrapper);
        return new PageResult(pageNum,pageSize,(int)page.getTotal(),page.getRecords());
    }
}
